home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
hity wydania
/
Ubuntu 9.10 PL
/
karmelkowy-koliberek-desktop-9.10-i386-PL.iso
/
casper
/
filesystem.squashfs
/
usr
/
sbin
/
dpkg-reconfigure
< prev
next >
Wrap
Text File
|
2009-10-02
|
3KB
|
159 lines
#!/usr/bin/perl -w
# This file was preprocessed, do not edit!
my $infodir="/var/lib/dpkg/info";
use strict;
use Debconf::Db;
use Debconf::Gettext;
use Debconf::Template;
use Debconf::Config;
use Debconf::AutoSelect qw(:all);
use Debconf::Log qw(:all);
Debconf::Config->priority('low');
my $unseen_only=0;
my $all=0;
my $force=0;
my $default_priority=0;
my $reload=1;
Debconf::Config->getopt(
gettext(qq{Usage: dpkg-reconfigure [options] packages
-a, --all Reconfigure all packages.
-u, --unseen-only Show only not yet seen questions.
--default-priority Use default priority instead of low.
--force Force reconfiguration of broken packages.}),
"all|a" => \$all,
"unseen-only|u" => \$unseen_only,
"default-priority" => \$default_priority,
"force" => \$force,
"reload!" => \$reload,
);
if ($> != 0) {
print STDERR sprintf(gettext("%s must be run as root"), $0)."\n";
exit 1;
}
Debconf::Db->load;
if ($default_priority) {
Debconf::Config->priority(Debconf::Question->get('debconf/priority')->value);
}
if (lc Debconf::Config->frontend eq 'noninteractive' &&
! Debconf::Config->frontend_forced) {
Debconf::Config->frontend('dialog');
}
my $frontend=make_frontend();
unless ($unseen_only) {
Debconf::Config->reshow(1);
}
my @packages;
if ($all) {
@packages=allpackages();
exit unless @packages;
}
else {
@packages=@ARGV;
if (! @packages) {
print STDERR "$0: ".gettext("please specify a package to reconfigure")."\n";
exit 1;
}
}
$ENV{DEBCONF_RECONFIGURE}=1;
foreach my $pkg (@packages) {
$frontend->default_title($pkg);
$frontend->info(undef);
$_=`dpkg --status $pkg`;
my ($version)=m/Version: (.*)\n/;
my ($status)=m/Status: (.*)\n/;
if (! $force) {
if (! defined $status || $status =~ m/not-installed$/) {
print STDERR "$0: ".sprintf(gettext("%s is not installed"), $pkg)."\n";
exit 1;
}
if ($status !~ m/ ok installed$/) {
print STDERR "$0: ".sprintf(gettext("%s is broken or not fully installed"), $pkg)."\n";
exit 1;
}
}
if ($reload) {
Debconf::Template->load("$infodir/$pkg.templates", $pkg)
if -e "$infodir/$pkg.templates";
}
foreach my $info (['prerm', 'upgrade', $version],
['config', 'reconfigure', $version],
['postinst', 'configure', $version]) {
my $script=shift @$info;
next unless -x "$infodir/$pkg.$script";
my $is_confmodule='';
if ($script ne 'config') {
open (IN, "<$infodir/$pkg.$script");
while (<IN>) {
if (/confmodule/i) {
$is_confmodule=1;
last;
}
}
close IN;
}
if ($script eq 'config' || $is_confmodule) {
my $confmodule=make_confmodule(
"$infodir/$pkg.$script", @$info);
$confmodule->owner($pkg);
1 while ($confmodule->communicate);
exit $confmodule->exitcode if $confmodule->exitcode > 0;
}
else {
Debconf::Db->save;
delete $ENV{DEBIAN_HAS_FRONTEND};
my $ret=system("$infodir/$pkg.$script", @$info);
if (int($ret / 256) != 0) {
exit int($ret / 256);
}
$ENV{DEBIAN_HAS_FRONTEND}=1;
Debconf::Db->load;
}
}
}
$frontend->shutdown;
Debconf::Db->save;
sub allpackages {
my @ret;
local $/="\n\n";
open (STATUS, "</var/lib/dpkg/status")
|| die sprintf(gettext("Cannot read status file: %s"), $!);
while (<STATUS>) {
push @ret, $1
if m/Status:\s*.*\sinstalled\n/ && m/Package:\s*(.*)\n/;
}
close STATUS;
return sort @ret;
}